package misListasDobles;


public class ListasDoblesCirculares {

    private NodeDoble inicio;

	public ListasDoblesCirculares(){

		inicio = null;
	}

	public NodeDoble getInicio(){

		return inicio;
	}

	public void setInicio(NodeDoble valor){

            inicio = valor;

	}

	public boolean listaVacia(){

		return (inicio == null);
	}

	public void agregarInicio(String valor){

		NodeDoble aux = new NodeDoble(valor, null, null);

			if (listaVacia()) {

				setInicio(aux);
				inicio.setNext(inicio);
				inicio.setBack(inicio);
			}

			else {

				aux.setNext(getInicio());
				aux.setBack(inicio.getBack());
				inicio.setBack(aux);
				aux.getBack().setNext(aux);
				setInicio(aux);


			}

	}

	 public void agregarFinal(String valor){

         NodeDoble aux = new NodeDoble(valor, null, null);

         if (listaVacia()){

             agregarInicio(valor);

         } else {
                 
             inicio.getBack().setNext(aux);
             aux.setBack(inicio.getBack());
             inicio.setBack(aux);
             aux.setNext(inicio);
                 
         }

         
    }


	public String borrarInicio() {

		NodeDoble aux = getInicio();
		String result = "";

                if (!listaVacia()) {

                result = inicio.getData();

                inicio.getBack().setNext(inicio.getNext());
                inicio.getNext().setBack(inicio.getBack());
                inicio.setBack(null);
                inicio = inicio.getNext();
                aux.setNext(null);



                }

		return result;
	}

	public String borrarFinal(){

		NodeDoble aux = inicio.getBack();

		String result = "";

			if (!listaVacia()) {

				result = aux.getData();
                aux.getBack().setNext(inicio);
                inicio.setBack(aux.getBack());
                aux.setBack(null);
                aux.setNext(null);

                }

		return result;
	}

	public int size(){

		int total = 0;

		NodeDoble aux = getInicio();

		if (!listaVacia()) {
			do {
				total++;
				aux = aux.getNext();

				} while (aux != getInicio());
		}

		return total;
	}

	public String toString(){

	  String result = "";
      NodeDoble aux = getInicio();
      
          if (!listaVacia()) {

              do {
            	  
                  result += "[" + aux.getData() + "]";
                  aux = aux.getNext();
                  
              } while(aux != getInicio());

          }
          
	  return result;

	}

}
